Add FEM Equation Tutorial/pl

Ćwiczenie
Temat
Dodawanie równań MES
Poziom trudności
Zaawansowany
Czas wykonania
1 dzień
Autorzy
JohnWang
Wersja FreeCAD
0.19
Pliki z przykładami
Nie dołączono
Zobacz również
-

Wprowadzenie

W tym poradniku dodamy równanie Flow (przepływu) do FreeCAD i zaimplementujemy wsparcie dla solvera Elmer. Upewnij się, że przeczytałeś i zrozumiałeś stronę Rozszerzenie modułu MES przed przejściem do tego poradnika.

Zadanie można podzielić na pięć części:

Nowy typ równania

W tym kroku zmodyfikujemy następujący plik:

Typ równania jest dzielony przez wszystkie obiekty równań różnych solverów. Każdy typ ma ciąg określający (np. "Heat" - ciepło) i dedykowane polecenie dodające równanie do wybranego solvera. To upraszcza GUI, ponieważ mamy tylko jeden przycisk dla równania ciepła, z którego korzystają wszystkie wspierane solvery.

Najpierw dodaj nowe równanie do modułu equationbase.py. Każde równanie wymaga dwóch klas. Proxy dokumentu i proxy widoku. Te dwie klasy będą później używane jako klasy bazowe dla konkretnych klas równania Elmer. Po prostu skopiuj i wklej je z istniejącego typu równania i dostosuj ścieżkę ikony w getIcon(self) proxy widoku.

class FlowProxy(BaseProxy):
    pass

class FlowViewProxy(BaseViewProxy):
    def getIcon(self):
        return ":/icons/FEM_EquationFlow.svg"

Nowy obiekt równania solvera Elmer

W tym kroku zaimplementujemy obiekt dokumentu. Musimy dodać nowy plik flow.py w:

i zmodyfikować następujące pliki:

Zacznijmy od dodania nowego pliku flow.py. Ten plik można skopiować z istniejącego równania.

Słowa kluczowe

Równanie przepływu w Elmer jest potencjalnie nieliniowym równanie. Oznacza to, że oprzemy naszą pracę na heat.py.

Edycja plików

Po skopiowaniu heat.py do flow.py, dostosuj flow.py w tych lokalizacjach:

def create(doc, name="'''Flow'''"):
    return femutils.createObject(
        doc, name, Proxy, ViewProxy)

class Proxy(nonlinear.Proxy, equationbase.'''Flow'''Proxy):

    Type = "Fem::EquationElmer'''Flow'''"

    def __init__(self, obj):
        super(Proxy, self).__init__(obj)
        obj.Priority = 10

class ViewProxy(nonlinear.ViewProxy, equationbase.'''Flow'''ViewProxy):
    pass

Następnie musisz zmienić właściwości dodane przez funkcję obj.addProperty(..) na te wymagane przez równanie.

W momencie pisania tego poradnika równanie przepływu solvera Elmer nie miało żadnych specjalnych właściwości. Zobacz równanie elastyczności solvera Elmer jeśli potrzebujesz przykładu z właściwościami.

Wreszcie, należy zarejestrować definicję makeEquationFlow w src/Mod/Fem/ObjectsFem.py poprzez zduplikowanie dostępnego wpisu.

FreeCAD korzysta z make do budowania programu. Więc musimy zarejestrować plik nowego modułu (flow.py) w src/Mod/Fem/CMakeLists.txt w sposób opisany na stronie Rozszerzenie modułu MES. Odpowiednie listy można łatwo znaleźć szukając plików modułów istniejących równań solvera Elmer.

Rozszerz obiekt solvera

W tym kroku zmodyfikujemy następujący plik:

Teraz sprawiliśmy, że FreeCAD rozpoznaje nowy typ równania a nawet dodaliśmy polecenie, które wstawia to równanie do obiektu wybranego solvera. Zaimplementowaliśmy też konkretny obiekt równania dla solvera Elmer. Pozostało utworzenie połączenia między solverem Elmer i równaniem przepływu. Należy to zrobić bezpośrednio w obiekcie solvera Elmer.

Zarejestruj moduł, w którym właśnie zaimplementowaliśmy obiekt naszego nowego równania (flow.py) z określnikiem równania z kroku 1 ("Flow") na liście _EQUATIONS w elmer/solver.py.

from .equations import electrostatic
+from .equations import flow

...

_EQUATIONS = {
    "Heat": heat,
    "Elasticity": elasticity,
+    "Flow": flow,
}

Rozszerz obiekt zapisujący równania

W tym kroku zmodyfikujemy następujący plik:

Ten plik zawiera klasę Writer, która eksportuje analizę do formatu SIF solvera Elmer.

Dla każdego wspieranego równania są dwie główne metody eksportu. Po prostu skopiuj je wszystkie z istniejącego równania i dostosuj je do swoich potrzeb.

Musisz zarejestrować metodę _handleFlow w klasie Writer:

class Writer(object):
...
    def write(self):
...
        self._handleFlow()

...

_handleFlow może kontrolować serię innych złożonych metod. Nasze równanie przepływu korzysta z następujących złożonych metod:

Zakończyliśmy teraz część funkcji nowego równania. Następnie połączymy nowe równanie poprzez GUI.

Narzędzie w GUI do tworzenia równania

Właśnie utworzyliśmy klasę nowego równania. Aby mieć do niej dostęp z GUI środowiska pracy MES, musimy utworzyć przycisk i podłączyć go do klasy nowego równania. Tu znajduje się poradnik: Poradnik: Dodaj przycisk do paska narzędzi MES.